/*
 * Copyright (c) 2020 IUV Inc. All rights reserved.
 * 项目名称：IUV TXY
 * 文件名：IuvPOIUtil.java
 * Date：20-10-22 下午3:32
 * Author：Will
 */

package com.iuv.imdemo.util;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;

import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;

public class IuvPOIUtil
{
	public static String getStringByCellIgnoreAll(Cell cell)
	{
		String cellStr = null;
		if (cell != null)
		{
			if (cell.getCellType().compareTo(CellType.STRING) == 0)
			{
				cellStr = cell.getRichStringCellValue().getString();
			}
			if (cell.getCellType().compareTo(CellType.NUMERIC) == 0)
			{
				if (DateUtil.isCellDateFormatted(cell))
				{
					System.out.println(cell.getDateCellValue());
				}
				else
				{
					cellStr = new BigDecimal(cell.getNumericCellValue()).setScale(0).toPlainString();
				}
			}

			if (cell.getCellType().compareTo(CellType.BOOLEAN) == 0)
			{
				cellStr = "" + cell.getBooleanCellValue();
			}

			if (cell.getCellType().compareTo(CellType.FORMULA) == 0)
			{
				cellStr = cell.getCellFormula();
			}
		}
		return cellStr;
	}

	/**
	 * 获取Excel工作簿对象
	 * @param is 输入流
	 * @return HSSFWorkbook Excel工作簿对象
	 */
	public static HSSFWorkbook getWordbook(InputStream is){
		POIFSFileSystem fs = null;
		HSSFWorkbook wb = null;
		try {
			fs = new POIFSFileSystem(is);
			wb = new HSSFWorkbook(fs);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return wb;
	}

	/**
	 * 获取工作表对象
	 * @param wb 工作簿对象
	 * @param index 工作表序号
	 * @return HSSFSheet 工作表对象
	 */
	public static HSSFSheet getSheet(HSSFWorkbook wb,int index){
		return wb.getSheetAt(index);
	}

	/**
	 * 获取默认工作表对象(第一个工作表)
	 * @param wb 工作簿对象
	 * @return HSSFSheet 工作表对象
	 */
	public static HSSFSheet getDefaultSheet(HSSFWorkbook wb){
		return getSheet(wb,0);
	}

	/**
	 * 获取字体(不常用的可直接设置)
	 * @param wb 工作簿对象
	 * @param fontName 字体名称
	 * @param fontSize 字体大小
	 * @param fontColor    字体颜色
	 * @return HSSFFont 字体对象
	 */
	public static HSSFFont getFont(HSSFWorkbook wb, String fontName, short fontSize, short fontColor){
		HSSFFont font = wb.createFont();
		font.setFontName(fontName);
		font.setFontHeightInPoints(fontSize);
		font.setColor(fontColor);
		return font;
	}

	/**
	 * 获取默认字体
	 * @param wb 工作簿对象
	 * @return HSSFFont 字体对象
	 */
	public static HSSFFont getDefaultFont(HSSFWorkbook wb){
		return getFont(wb,"宋体",(short)12,HSSFFont.COLOR_NORMAL);
	}

	/**
	 * 获取单元格样式(不常用的可直接设置)
	 * @param wb 工作簿对象
	 * @param font 字体
	 * @param isBorder 是否有边框
	 * @param align    横向对齐方式
	 * @return HSSFCellStyle 单元格样式
	 */
	public static HSSFCellStyle getCellStyle(HSSFWorkbook wb,HSSFFont font,boolean isBorder,HorizontalAlignment align){
		HSSFCellStyle cellStyle = wb.createCellStyle();
		cellStyle.setFont(font);
		if(isBorder){
			cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
			cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
			cellStyle.setBorderTop(BorderStyle.THIN);//上边框
			cellStyle.setBorderRight(BorderStyle.THIN);//右边框
		}
		cellStyle.setAlignment(align);
		cellStyle.setAlignment(HorizontalAlignment.CENTER);
		return cellStyle;
	}


	/**
	 * 获取默认单元格样式
	 * @param wb 工作簿对象
	 * @return HSSFCellStyle 单元格样式
	 */
	public static HSSFCellStyle getDefaultCellStyle(HSSFWorkbook wb){
		return getCellStyle(wb,getDefaultFont(wb),false,HorizontalAlignment.LEFT);
	}

	/**
	 * 获取特定行的总列数
	 * @param row 工作簿对象
	 * @return int 列的总行数
	 */
	public static int getColumnCount(HSSFRow row){
		return  row.getPhysicalNumberOfCells();
	}

	/**
	 * 获取默认行（第一行）总列数
	 * @param sheet 工作表对象
	 * @return int 列的总列数
	 */
	public static int getDefaltColumnCount(HSSFSheet sheet){
		return  getColumnCount(sheet.getRow(0));
	}
	/**
	 * 获取总行数
	 * @param sheet 工作表对象
	 * @return int 总行数
	 */
	public static int getDefaltRowCount(HSSFSheet sheet){
		return  sheet.getLastRowNum();
	}
}
